package net.uzen.office.common.util;

import javax.servlet.http.HttpServletRequest;

import net.uzen.office.common.UzenOfficeConstants;
import net.uzen.office.common.model.Base;
import net.uzen.office.common.model.SessionInfo;

public class SessionUtil {
	
	/**
	 * Session 정보를 가져온다.
	 * @param request
	 * @return
	 */
	public static SessionInfo getSession(HttpServletRequest request) {
		return (SessionInfo) request.getSession()
		.getAttribute(UzenOfficeConstants.SESSION_KEY);
	}
	/**
	 * 로그 인 상태 여부를 확인한다.
	 * 
	 * @param request
	 * @return
	 */
	public static boolean isSignedIn(HttpServletRequest request) {
		boolean result = false;
		if (request.getSession() != null) {
			SessionInfo sessionInfo = getSession(request);
			// TODO : null 이 아니고 다른 조건이 하나가 더 붙어서 세션임이 확인되면 true 를 리턴한다.
			if (sessionInfo != null) {
				result = true;
			}
		}
		return result;
	}

	/**
	 * 세션 정보를 얻는다.
	 * TODO : 세션 정보가 없을 때 null 이 아닌 에러를 던지는 부분을 추가해야 한다.
	 * @param request
	 * @return
	 */
	public static SessionInfo getSessionInfo(HttpServletRequest request) {
		if (isSignedIn(request)) {
			return getSession(request);
		} else {
			return null;
		}
	}
	
	/**
	 * 세션 정보를 셋팅한다.
	 * @param request
	 * @param sessionInfo
	 */
	public static void setSessionInfo(HttpServletRequest request, SessionInfo sessionInfo) {
		request.getSession().setAttribute(UzenOfficeConstants.SESSION_KEY, sessionInfo);
	}
	
	/**
	 * 세션 정보를 지워버린다.
	 * @param request
	 */
	public static void invalidateSession(HttpServletRequest request) {
		request.getSession().invalidate();
	}
	
	/**
	 * 어드민 세션일 경우 true, 아니면 false를 리턴한다.
	 * @param request
	 * @return
	 */
	public static boolean isAdminSession(HttpServletRequest request) {
		// TODO : 로그인 상태인지 먼저 확인하고 세션 가져올 것
		if(getSession(request).getMemberNo() == 0) {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * 세션 정보를 셋팅하여 돌려준다.
	 * @param request
	 */
	public static Base getSessionInfoBase(HttpServletRequest request) {
		Base base = new Base();
		if(isSignedIn(request)) {
			base.setCreatorNo(getSession(request).getMemberNo());
			base.setModifierNo(base.getCreatorNo());
		} else {
			// TODO : 에러
		}
		return base; 
	}
	
}
